package 栈;

import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Deque;

public class No739每日温度 {

    /**
     * 请根据每日 气温 列表，重新生成一个列表。对应位置的输出为：要想观测到更高的气温，至少需要等待的天数。
     * 如果气温在这之后都不会升高，请在该位置用 0 来代替。
     * 例如，给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73]，
     * 你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
     * 提示：气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度，都是在 [30, 100] 范围内的整数。
     */

    public int[] dailyTemperatures(int[] T) {

        int[] result=new int[T.length];
        Arrays.fill(result,0);
        Deque<Integer> stack=new ArrayDeque<>();
        stack.addLast(0);

        int index=1;

        while (index<T.length){

            while (!stack.isEmpty()&&T[stack.peekLast()]<T[index]){
                result[stack.peekLast()]=index-stack.peekLast();
                stack.pollLast();
            }

            stack.addLast(index);

            index++;
        }

        return result;
    }

}
